package com.vanysoft.business.base.user.dao;

import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.vanysoft.business.base.user.entity.TBaseUser;
import com.vanysoft.business.index.entity.LoginUserinfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

@Mapper
public interface BaseUserMapper {
    int deleteByPrimaryKey(String userId);

    int insert(TBaseUser userId);

    int insertSelective(TBaseUser userId);

    TBaseUser selectByPrimaryKey(String userId);

    int updateByPrimaryKeySelective(TBaseUser userId);

    int updateByPrimaryKey(TBaseUser userId);


    /**
     * Function Name               selectByUserAccount
     *
     * @param userAccount
     * @return
     * @description 按照userAccount查询
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月29日 上午9:44:18           SharpClaw_x      Initial
     * *********************************************************************
     */
    TBaseUser selectByUserAccount(String userAccount);


    /**
     * Function Name               queryUserInfoByCode
     *
     * @param userCode
     * @return
     * @description TODO(根据用户代码查询用户名称 ， 返回Map)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年5月27日 上午10:25:02          SharpClaw_x                     Initial
     * *********************************************************************
     */
    Map queryUserInfoByCode(String userId);

    /**
     * Function Name               queryOrgInfoByUserCode
     *
     * @param userCode
     * @return
     * @description 组织机构字符串递归查询用户拥有数据权限集合
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月2日 上午11:08:31          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map> queryOrgListByOrgCodes(String orgCodes);

    /**
     * Function Name               queryOrgInfoByUserCode
     *
     * @param userCode
     * @return
     * @description 根据用户代码查询组织机构字符串
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月2日 上午11:08:31          SharpClaw_x                     Initial
     * *********************************************************************
     */
    String queryOrgCodesByUserCode(String userCode);

    /**
     * Function Name               queryOrgInfoByOrgStr
     *
     * @param orgCodeStr
     * @return
     * @description TODO(根据组织机构字符串查询机构信息)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月2日 上午11:08:29          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map> queryOrgInfoByOrgStr(String orgCodeStr);

    /**
     * Function Name               queryOrgCodeShowUserCode
     *
     * @param userCode
     * @return
     * @description TODO(根据用户代码查询显示用户的机构)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月2日 上午11:48:15          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map> queryOrgCodeShowUserCode(String userCode);

    /**
     * Function Name               queryUserInfoByOrgCode
     *
     * @param orgCode
     * @return
     * @description TODO(根据机构代码查询用户信息)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月2日 下午1:55:40          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map> queryUserInfoByOrgCode(String orgCode);


    /**
     * Function Name               loadRoleByUserCode
     *
     * @param userCode
     * @return
     * @description TODO(根据用户代码查询未分配角色信息)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月2日 下午3:31:55          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map> loadNoAllotRoleByUserCode(String userCode);


    /**
     * Function Name               loadAllotRoleByUserCode
     *
     * @param userCode
     * @param roleName
     * @return
     * @description TODO(根据用户代码查询已分配角色信息)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月2日 下午4:22:28          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map> loadAllotRoleByUserCode(String userCode);

    /**
     * Function Name               queryUserInfo
     *
     * @param userCode
     * @return
     * @description 查询用户基本信息
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月16日 下午5:31:44           SharpClaw_x      Initial
     * *********************************************************************
     */
    LoginUserinfo queryUserInfo(String userId);

    /**
     * Function Name               queryUserInfo
     *
     * @param userCode
     * @return
     * @description 用户机构
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月16日 下午5:31:56           SharpClaw_x      Initial
     * *********************************************************************
     */
    List<Map<String, Object>> queryUserOrg(String userCode);

    /**
     * Function Name               queryUserInfo
     *
     * @param userId
     * @return
     * @description 用户群组
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月16日 下午5:32:15           SharpClaw_x      Initial
     * *********************************************************************
     */
    List<Map<String, Object>> queryUserTeam(String userId);

    List<Map<String, Object>> queryShowTeam(@Param("userId") String userId, @Param("myOrgs") Set<String> myOrgs);

    /**
     * Function Name               queryUserInfo
     *
     * @param userId
     * @return
     * @description 用户分类
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月16日 下午5:32:23           SharpClaw_x      Initial
     * *********************************************************************
     */
    List<Map<String, Object>> queryUserTag(String userId);

    List<Map<String, Object>> queryShowTags(@Param("userId") String userId, @Param("myOrgs") Set<String> myOrgs);

    /**
     * Function Name               queryUserRole
     *
     * @param userId
     * @return
     * @description 用户角色
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月20日 下午2:25:41           SharpClaw_x      Initial
     * *********************************************************************
     */
    List<Map<String, Object>> queryUserRole(String userId);

    List<Map<String, Object>> queryShowRole(@Param("userId") String userId, @Param("myOrgs") Set<String> myOrgs);

    /**
     * Function Name               queryDataManagement
     *
     * @param userId
     * @return
     * @description 查询数据权限
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月28日 下午4:19:10           SharpClaw_x      Initial
     * *********************************************************************
     */
    String queryDataManagement(String userId);

    /**
     * Function Name               getBaseUserInfoBycondition
     *
     * @param allOrgCodes
     * @param code
     * @param gender
     * @param orgCode
     * @param teamCode
     * @param tagCode
     * @return
     * @description 人员筛选器
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月20日 下午3:00:07           SharpClaw_x                    Initial
     * *********************************************************************
     */
    List<TBaseUser> getBaseUserInfoBycondition(Pagination pagination, @Param("allOrgCodes") String allOrgCodes, @Param("code") String code, @Param("gender") String gender,
                                               @Param("orgCode") String orgCode, @Param("teamCode") String teamCode,
                                               @Param("tagCode") String tagCode);

    /**
     * Function Name               checkUsercode
     *
     * @param userAccount
     * @return
     * @description 检查账号是否重复
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年6月28日 下午4:08:07           SharpClaw_x                    Initial
     * *********************************************************************
     */
    List<Map<String, Object>> checkUsercode(String userAccount);


    /**
     * Function Name               getBaseUserAllInfoBycondition
     *
     * @param code
     * @param gender
     * @param orgCode
     * @param teamCode
     * @param tagCode
     * @return
     * @description (发送消息查询所有人员 - 消息中心)
     * Modify History:              Date             Programmer       Notes
     * ---------        ---------------  ---------
     * 2017年8月29日 下午1:59:51          SharpClaw_x                     Initial
     * *********************************************************************
     */
    List<Map<String, Object>> getBaseUserAllInfoBycondition(Pagination pagination, @Param("code") String code, @Param("gender") String gender,
                                                            @Param("orgCode") String orgCode, @Param("teamCode") String teamCode,
                                                            @Param("tagCode") String tagCode);
}